import main from "../dbs/main.db";
import { http } from 'system';

/**
 * 获取提示词模板分页列表
 * @param {string} [keyword] - 搜索关键词，搜索范围：名称、描述、内容（可选）
 * @param {number} [page=1] - 页码（默认1）
 * @param {number} [pageSize=10] - 每页数量（默认10）
 * @returns {Object} 标准响应格式 {code:number, message:string, data: { list:[{id:number, name:string, content:string, description:string, create_at:string, modify_at:string}], total:number, page:number, pageSize:number }}
 * @example
 * // 使用示例
 * const result = await getTemplateList('技术', 1, 10);
 * 
 * @clientCall iToolX.modules.promptTemplateManager.getTemplateList()
 * 
 * // 完整的result数据结构说明
 * {
 *   code: 200,
 *   message: '',
 *   data: {
 *     list: [
 *       {
 *         id: 1,
 *         name: "技术文章模板",
 *         content: "请根据以下分析结果生成一篇技术文章...",
 *         description: "用于生成技术类文章的模板",
 *         create_at: "2023-01-01T00:00:00Z",
 *         modify_at: "2023-01-01T00:00:00Z"
 *       }
 *     ],
 *     total: 1,
 *     page: 1,
 *     pageSize: 10
 *   }
 * }
 */
async function getTemplateList(keyword = '', page = 1, pageSize = 10) {
  try {
    const queryParams = {
      "total@": "prompt_templates[]/total",
      "prompt_templates[]": {
        page,
        count: pageSize,
        query: 2,
        "@order": "create_at-"
      }
    };
    
    // 添加搜索条件
    if (keyword) {
      queryParams["prompt_templates[]"]["@or"] = {
        "name$": '%' + keyword + '%',
        "description$": '%' + keyword + '%',
        "content$": '%' + keyword + '%'
      };
    }
    
    const result = await main.queryAsync(queryParams);
    
    return {
      code: 200,
      message: '',
      data: {
        list: result.prompt_templates || [],
        total: result.total || 0,
        page,
        pageSize
      }
    };
  } catch (error) {
    console.error('获取提示词模板列表失败:', error);
    return {
      code: 500,
      message: '获取提示词模板列表失败',
      data: error.message
    };
  }
}

/**
 * 添加提示词模板
 * @param {string} name - 模板名称
 * @param {string} content - 模板内容
 * @param {string} [description] - 模板描述（可选）
 * @returns {Object} 标准响应格式 {code:number, message:string, data:{id:number}}
 * @example
 * // 使用示例
 * const result = await addTemplate('技术文章模板', '请根据以下分析结果生成一篇技术文章...', '用于生成技术类文章的模板');
 * 
 * @clientCall iToolX.modules.promptTemplateManager.addTemplate()
 * 
 * // 完整的result数据结构说明
 * {
 *   code: 200,
 *   message: '添加成功',
 *   data: {
 *     id: 1
 *   }
 * }
 */
async function addTemplate(name, content, description = '') {
  try {
    const id = await main.addAsync({
      "prompt_templates": {
        name,
        content,
        description
      }
    });
    
    return {
      code: 200,
      message: '添加成功',
      data: {
        id
      }
    };
  } catch (error) {
    console.error('添加提示词模板失败:', error);
    return {
      code: 500,
      message: '添加提示词模板失败',
      data: error.message
    };
  }
}

/**
 * 更新提示词模板
 * @param {number} id - 模板ID
 * @param {string} name - 模板名称
 * @param {string} content - 模板内容
 * @param {string} description - 模板描述
 * @returns {Object} 标准响应格式 {code:number, message:string, data:null}
 * @example
 * // 使用示例
 * const result = await updateTemplate(1, '技术文章模板', '请根据以下分析结果生成一篇技术文章...', '用于生成技术类文章的模板');
 * 
 * @clientCall iToolX.modules.promptTemplateManager.updateTemplate()
 * 
 * // 完整的result数据结构说明
 * {
 *   code: 200,
 *   message: '更新成功',
 *   data: null
 * }
 */
async function updateTemplate(id, name, content, description) {
  try {
    await main.modifyAsync({
      "prompt_templates": {
        id,
        name,
        content,
        description
      }
    });
    
    return {
      code: 200,
      message: '更新成功',
      data: null
    };
  } catch (error) {
    console.error('更新提示词模板失败:', error);
    return {
      code: 500,
      message: '更新提示词模板失败',
      data: error.message
    };
  }
}

/**
 * 删除提示词模板
 * @param {number} id - 模板ID
 * @returns {Object} 标准响应格式 {code:number, message:string, data:null}
 * @example
 * // 使用示例
 * const result = await deleteTemplate(1);
 * 
 * @clientCall iToolX.modules.promptTemplateManager.deleteTemplate()
 * 
 * // 完整的result数据结构说明
 * {
 *   code: 200,
 *   message: '删除成功',
 *   data: null
 * }
 */
async function deleteTemplate(id) {
  try {
    await main.removeAsync({
      "prompt_templates": {
        id
      }
    });
    
    return {
      code: 200,
      message: '删除成功',
      data: null
    };
  } catch (error) {
    console.error('删除提示词模板失败:', error);
    return {
      code: 500,
      message: '删除提示词模板失败',
      data: error.message
    };
  }
}

/**
 * 获取提示词模板详情
 * @param {number} id - 模板ID
 * @returns {Object} 标准响应格式 {code:number, message:string, data:{id:number, name:string, content:string, description:string, create_at:string, modify_at:string}}
 * @example
 * // 使用示例
 * const result = await getTemplateDetail(1);
 * 
 * @clientCall iToolX.modules.promptTemplateManager.getTemplateDetail()
 * 
 * // 完整的result数据结构说明
 * {
 *   code: 200,
 *   message: '',
 *   data: {
 *     id: 1,
 *     name: "技术文章模板",
 *     content: "请根据以下分析结果生成一篇技术文章...",
 *     description: "用于生成技术类文章的模板",
 *     create_at: "2023-01-01T00:00:00Z",
 *     modify_at: "2023-01-01T00:00:00Z"
 *   }
 * }
 */
async function getTemplateDetail(id) {
  try {
    const result = await main.queryAsync({
      "prompt_templates": {
        id,
        "@column": "id,name,content,description,create_at,modify_at"
      }
    });
    
    if (result.prompt_templates?.id) {
      return {
        code: 200,
        message: '',
        data: result.prompt_templates
      };
    } else {
      return {
        code: 404,
        message: '模板不存在',
        data: null
      };
    }
  } catch (error) {
    console.error('获取提示词模板详情失败:', error);
    return {
      code: 500,
      message: '获取提示词模板详情失败',
      data: error.message
    };
  }
}

/**
 * 使用模板和分析数据生成文章
 * @param {number} templateId - 模板ID
 * @param {Object} analysisData - 分析数据
 * @returns {Object} 标准响应格式 {code:number, message:string, data:{articleId:number, template:string, analysisData:Object}}
 * @example
 * // 使用示例
 * const result = await generateArticle(1, { keywords: ['AI', '技术'], points: ['发展迅速'], events: ['新产品发布'] });
 * 
 * @clientCall iToolX.modules.promptTemplateManager.generateArticle()
 * 
 * // 完整的result数据结构说明
 * {
 *   code: 200,
 *   message: '生成任务已创建',
 *   data: {
 *     articleId: 1,
 *     template: "请根据以下分析结果生成一篇技术文章...",
 *     analysisData: { keywords: ['AI', '技术'], points: ['发展迅速'], events: ['新产品发布'] }
 *   }
 * }
 */
async function generateArticle(templateId, analysisData) {
  try {
    // 获取模板详情
    const templateResult = await getTemplateDetail(templateId);
    if (templateResult.code !== 200) {
      return templateResult;
    }
    
    const template = templateResult.data;
    
    // 获取当前时间戳
    const currentTime = new Date().toLocaleString();
    
    // 这里应该调用AI服务生成文章，但根据iToolX框架规范，超出范围的功能由客户端处理
    // 所以此处只保存分析数据，返回模板内容，实际生成由客户端完成
    const articleId = await main.addAsync({
      "generated_articles": {
        template_id: templateId,
        analysis_data: JSON.stringify(analysisData),
        article_content: '', // 实际内容由客户端生成后更新
        create_at: currentTime,
        modify_at: currentTime
      }
    });
    
    return {
      code: 200,
      message: '生成任务已创建',
      data: {
        articleId,
        template: template.content,
        analysisData
      }
    };
  } catch (error) {
    console.error('生成文章失败:', error);
    return {
      code: 500,
      message: '生成文章失败',
      data: error.message
    };
  }
}

// 导出所有方法
export { 
  getTemplateList, 
  addTemplate, 
  updateTemplate, 
  deleteTemplate, 
  getTemplateDetail, 
  generateArticle 
};